package com.example.administrator.ad_auto66;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    private ViewPager mviewPager;
    private TextView tvTitle;//标题
    private LinearLayout llContainer;//引导点

    //图片集合
    private int [] mImageIds = new int[]{R.drawable.a,R.drawable.b,
            R.drawable.c,R.drawable.d,R.drawable.e};

    //图片标题的集合
    private final String [] mImageDes = {"巩俐不低俗，我就不低俗","朴树又回来啦！",
                "解密北京电影如何升级","乐视网TV版大派送","热血屌丝的反杀"};

    private int mPreviouesPos;//上一个页面位置

    private Handler mHandler = new  Handler(){
        @Override
        public void handleMessage(Message msg) {
            int currentItem = mviewPager.getCurrentItem();//获取当前页面位置
            mviewPager.setCurrentItem(++currentItem);//跳到下一个页面
            //为了一直跳页,继续发送延时2s的消息，形成类似递归的效果，使广告一直循环切换
            mHandler.sendEmptyMessageDelayed(0,2000);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mviewPager = (ViewPager) findViewById(R.id.vp_pager);
        tvTitle = (TextView) findViewById(R.id.tv_title);
        llContainer = (LinearLayout) findViewById(R.id.ll_container);

        mviewPager.setAdapter(new MyAdapter());//给viewpager设置数据
        //mviewPager.setCurrentItem(Integer.MAX_VALUE/2);//设置第一页的值，为了开始时往左滑动
        mviewPager.setCurrentItem(mImageIds.length*10000);//设置5000，第一张不变
        //设置滑动监听
        mviewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            //滑动过程中
            @Override
            public void onPageScrolled(int position, float positionOffset,
                                       int positionOffsetPixels) {

            }
            //某个页面被选中
            @Override
            public void onPageSelected(int position) {
                int pos = position % mImageIds.length;
                tvTitle.setText(mImageDes[pos]);//更新新闻标题

                //更新小圆点
                llContainer.getChildAt(pos).setEnabled(true);//将选中的页面小圆点变色
                //将上一个圆点变为灰色
                llContainer.getChildAt(mPreviouesPos).setEnabled(false);
                mPreviouesPos = pos;//更新上一个页面位置
            }

            //滑动状态发生变化，用的少
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        tvTitle.setText(mImageDes[0]);//初始化新闻标题，不然第一页没标题
        //动态添加5个小圆点
        for(int i=0;i<mImageIds.length;i++){
            ImageView view = new ImageView(this);//从这里起我们自己画圆
            view.setImageResource(R.drawable.shape_point_selector);//添加自己画的圆
            //由于小圆点比较挤，我们自己设置宽高
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);

            if(i!=0) {//从第二个圆点开始设置左边距，保证圆点之间的间距
                //设置像素
                params.leftMargin = 10;
                view.setEnabled(false);//设置不可用，变为灰色圆点
            }

            view.setLayoutParams(params);//设置给布局
            llContainer.addView(view);
        }

        mHandler.sendEmptyMessageDelayed(0,2000);//发一个延时2s更新广告条的消息


        //为了用户滑动时自动跳转停止,设置触摸监听
        mviewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //删掉消息，就没有msg了
                        //清除所有消息和Runnable对象
                        mHandler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_UP:
                        //继续轮播广告
                        mHandler.sendEmptyMessageDelayed(0,2000);
                        break;
                }
                return false;//返回false，让viewpager原生触摸效果正常运行
            }
        });
    }


    class MyAdapter extends PagerAdapter{

        //返回item的个数
        @Override
        public int getCount() {
            //这里是5个，如果不写5，写个很大的数，我们的滑动就会无限循环下去
            //return mImageIds.length;
            return Integer.MAX_VALUE;
        }

        //判断当前要展示的view和返回的object是否是一个对象，如果是，才展示
        //这个方法永远不变
        @Override
        public boolean isViewFromObject(View view, Object object) {

            return view==object;
        }

        //这个方法手动生成，
        // 类似getView方法，初始化每个item的布局，viewpager会自动加载前一张和后一张图片，
        // 保证始终保持3张图片，剩余的都销毁
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            /*
            * position为0时，0%5余5,1除5余5，到5除5余0,6除5余1，一直循环0-5
            * */
            int pos = position%mImageIds.length;//取余

            ImageView view = new ImageView(getApplicationContext());
           //如果设置背景，这个setImageResource不用了
            //view.setImageResource(mImageIds[position]);
            view.setBackgroundResource(mImageIds[pos]);//这样设置背景，就会填充屏幕

            //将item的布局添加给容器
            container.addView(view);
            //Log.i("aa","初始化item---------------------"+pos);

            return view;//返回item的布局对象
        }

        //item销毁的回调方法---手动
        //这个方法永远不变
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            //从容器中移除布局对象
            container.removeView((View) object);
            //Log.i("aa", "销毁item---------------------" + position);

        }
    }
}
